﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using GRUPO_4.Dominio;
using System.Configuration;


namespace GRUPO_4.Persistencia
{
    public class ContratoDao : IContratoDAO
    {
        public SqlConnection conexion;

        public ContratoDao()
        {
            conexion = new SqlConnection();
            conexion.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        }

        public Contrato CrearContrato(Contrato contrato)
        {
            conexion.Open();
            String sentencia = "INSERT INTO Contrato VALUES('" + contrato.codContrato + "','" + contrato.descripcionContrato + "')";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerContrato(contrato.codContrato); 
        }

        public Contrato ModificarContrato(Contrato contrato)
        {
            conexion.Open();
            String sqlvalores1 = "descripcionContrato='" + contrato.descripcionContrato + "'" +
                                 " WHERE codContrato=" + contrato.codContrato;

            String sentencia = "UPDATE Contrato SET " + sqlvalores1;
            SqlCommand comando = new SqlCommand(sentencia, conexion);

            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerContrato(contrato.codContrato); 
        }

        public Contrato ObtenerContrato(int codigo)
        {

            conexion.Open();
            String sentencia = "SELECT * FROM Contrato WHERE codContrato=" + codigo;

            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            Contrato contrato = new Contrato();
            if (resultado.HasRows) 
            {
                resultado.Read(); 
                contrato.codContrato = (int)resultado["codContrato"];
                contrato.descripcionContrato = (String)resultado["descripcionContrato"];
            }
            else 
            {
                
                contrato = null;
            }
            conexion.Close();
            return contrato;

        }
        public void EliminarContrato(int contratocod)
        {
            conexion.Open();
            String sqlvalores1 = " WHERE codContrato=" + contratocod;
            String sentencia = "DELETE FROM Contrato " + sqlvalores1;
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            
        }

        public ICollection<Contrato> ListarTodos()
        {
            conexion.Open();
            String sentencia = "SELECT * FROM Contrato";

            SqlCommand comando = new SqlCommand(sentencia, conexion);

            SqlDataReader resultado = comando.ExecuteReader();

            //Se declara la coleccion de Contratos --- Coleccion es un contenedor de objetos de tipo Contrato

            ICollection<Contrato> objColeccionContratos = new List<Contrato>();

            while (resultado.Read())
            {

                Contrato unContrato = new Contrato();

                unContrato.codContrato = (int)resultado["codContrato"];

                unContrato.descripcionContrato = (String)resultado["descripcionContrato"];

                objColeccionContratos.Add(unContrato);

            }
            conexion.Close();
            return objColeccionContratos;

        }



        public ICollection<Contrato> ListarPorNombreSimilar(string descripcion)
        {
            throw new NotImplementedException();
        }

        public Contrato Crear(Contrato contrato)
        {

            return this.CrearContrato(contrato); 
        }

        public Contrato Obtener(int id)
        {
        
            return this.ObtenerContrato(id);
        }

        public Contrato Modificar(Contrato entidad)
        {
   
            return this.ModificarContrato(entidad);
        }

        public void Eliminar(Contrato entidad)
        {
            this.EliminarContrato(entidad.codContrato);
   
        }
    }
}